package battleenum

type J技能类别 uint

const (
	J技能类别_攻击 J技能类别 = 1 << iota
	J技能类别_防御
	J技能类别_控制
	J技能类别_治疗
	J技能类别_魔法
	J技能类别_物理
	J技能类别_光环
	J技能类别_被动的
	J技能类别_终极技能
)

type J技能施法类型 uint

const (
	J技能施法类型_主动技能 J技能施法类型 = iota
	J技能施法类型_被动节能
)

// @schema_go --EnumToString=true
// @alias 技能标旗
type J技能标旗 int

const (
	J技能标旗_死亡时禁止 J技能标旗 = iota
)

// @schema_go --EnumToString=true
// @alias 冲锋技能标旗
type C传送效果标旗 int

const (
	// 当启用后，该效果将从单位的指令队列中清空该单位先前所接收到的所有指令
	C冲锋技能标旗_清除指定队列 C传送效果标旗 = iota
)

// @schema_go --EnumToString=true
// @alias 传送方式
type C传送方式 int

const (
	C传送方式_瞬移 C传送方式 = iota
	C传送方式_移动器
)

// @schema_go
// @schema_ts
// @cache_ts
// @alias 技能创建时机
type J技能创建时机 int

const (
	// 	// 等待
	// 	// 可以理解为等待花费达成阶段
	// 	// 等待是那种带“等待资源”flag的技能在资源满足前的卡住状态。
	// 	// 标旗-等待花费的作用是：等待消费-冷却或者消费-充能达到要求的时候施法技能
	J技能创建时机_未知 J技能创建时机 = 0
	J技能创建时机_前摇 J技能创建时机 = 1
	J技能创建时机_蓄力 J技能创建时机 = 2
	J技能创建时机_引导 J技能创建时机 = 3
	J技能创建时机_后摇 J技能创建时机 = 4
)

// @schema_go
// @schema_ts
// @cache_ts
// @alias 技能销毁时机
type J技能销毁时机 int

const (
	J技能销毁时机_无  J技能销毁时机 = 0
	J技能销毁时机_蓄力 J技能销毁时机 = 2
	J技能销毁时机_引导 J技能销毁时机 = 3
	J技能销毁时机_后摇 J技能销毁时机 = 4
	J技能销毁时机_停止 J技能销毁时机 = 5
)

// @schema_go
// @schema_ts
// @cache_ts
// @alias 技能阶段
type J技能阶段 int

const (
	J技能阶段_等待 J技能阶段 = 6
	J技能阶段_前摇 J技能阶段 = 1
	J技能阶段_蓄力 J技能阶段 = 2
	J技能阶段_引导 J技能阶段 = 3
	J技能阶段_后摇 J技能阶段 = 4
	J技能阶段_停止 J技能阶段 = 5
)

type Z指令目标 int

const (
	// 当技能非【瞬发】时，通过指针选取目标
	// 当技能为【瞬发】时，指针所在的【单位或点】作为目标，如果超出【效果范围】则选取【效果范围】与线段【施法者-指针点】的交点作为目标点。
	Z指令目标_自动 Z指令目标 = iota
	// 当技能非【瞬发】时，选自施法者为目标
	// 当技能为【瞬发】时，选自施法者为目标，因为选取的是自己，所以不会超出效果范围
	Z指令目标_施法者
	// 当技能非【瞬发】时，指针所在的【单位或点】作为目标
	// 当技能为【瞬发】时，指针所在的【单位或点】作为目标，如果超出【效果范围】则发布失败
	Z指令目标_指针
)

type J技能定位 int

const (

	// 中立
	// 当使用该技能进行瞄准时，没有指定的偏好设置来选择友方或敌方单位。
	J技能定位_中立 J技能定位 = iota
	// 正
	// 瞄准时优先瞄准友方单位。
	J技能定位_正
	// 负
	// 瞄准时优先瞄准敌方单位。
	J技能定位_负
)

type J技能指令操作 int

const (
	// 根据【J技能指令目标】选取目标，如果指令目标未【无】，不会出现选取操作
	J技能指令操作_选取 J技能指令操作 = iota

	// 技能立刻释放，无须任何转身移动和施法时间。而且，不会打断当前的指令队列，也不会影响目前的运动状态和指令状态。所以可以边跑边施法什么的。
	// 如果目标在【施法范围】之外，会出现错误提示
	J技能指令操作_瞬发

	// 根据【J技能指令目标】选取目标，如果指令目标未【无】，不会出现选取操作
	// 如果目标在【射程】内，瞬发技能
	// 如果目标在【射程】外，移动到【射程】内，瞬发技能
	J技能指令操作_瞬发偏好
)

type J技能指令目标 int

const (
	// 无目标, 指向自己
	J技能指令目标_所在单位 J技能指令目标 = iota
	J技能指令目标_点
	J技能指令目标_单位
	J技能指令目标_单位或点
	J技能指令目标_向量
	J技能指令目标_轨迹
)

type J技能连击模式 int

const (
	J技能连击模式_无 J技能连击模式 = iota
	// 当玩家或AI选择使用同一个技能时，触发连续攻击
	J技能连击模式_连续
	// 当使用技能时，下一个指令强制未连击
	J技能连击模式_强制
)

// // @schema_go --EnumToString=true
// type AbilEffectStage int

// const (
// 	// 接近
// 	// 当单位开始执行技能指令时，立即触发接近事件，此时技能按钮变为高亮状态。
// 	// 如果目标在射程以外，则单位会接近目标；
// 	// 如果需要转向，则进行转向。
// 	// 接近和转向花费的时间即接近阶段，如果单位开始执行技能指令时就在射程以内，且具备正确的面向，则接近阶段的时间为0
// 	AbilEffectStage_接近 AbilEffectStage = iota

// 	// 等待
// 	// 可以理解为等待花费达成阶段
// 	// 等待是那种带“等待资源”flag的技能在资源满足前的卡住状态。
// 	// 标旗-等待花费的作用是：等待消费-冷却或者消费-充能达到要求的时候施法技能
// 	AbilEffectStage_等待

// 	// 准备
// 	// 当单位完成接近阶段后，会停下来（如果本来在移动或转向的话），并立即触发准备事件。可以在技能中指定[准备时间]，即准备阶段的时长。
// 	// 可以理解为施法前摇阶段
// 	AbilEffectStage_准备

// 	// 施放
// 	// 当单位完成准备阶段后，立即触发施放事件。
// 	// 可以在技能中指定[施法开始时间]，即施放阶段的时长。
// 	// 如果施放阶段完成以前（包括接近和准备阶段）被打断，则技能不会真的施放出来，也不会有技能消耗。
// 	// 准备和施放两个阶段都可以用来做技能的前摇时间。
// 	// 通常情况下前摇只有一段，官方是用施放阶段来做的，提倡大家向官方看齐，以提高技能规范性和可读性。
// 	// 可以理解为施法咏唱阶段
// 	AbilEffectStage_施放

// 	// 引导
// 	// 当单位完成施放阶段后，立即触发引导事件，然后调用技能效果，最后扣除技能消耗，这三件事依次发生，但中间无时间间隔。
// 	// 如果技能没有设置[施法结束时间]（即最小引导时间），也没有使用需要引导的持续性效果，那么引导时间将变成零，但不影响引导事件的触发。
// 	// 如果引导有持续时间，在引导期间被打断，技能已经被施放出来，技能消耗也会被扣除，如果技能有冷却，也会进入冷却，但是通常情况下，技能被打断后不能成功完成最终效果，这取决于效果是如何制作的。
// 	// 可以理解为效果实施处理，到达此阶段，会产生消耗和效果
// 	AbilEffectStage_引导

// 	// 结束
// 	// 当单位完成引导阶段后，立即触发结束事件，施法即告完成。
// 	// 如果你设置了结束时间，并且不允许打断的话，则技能会有强制后摇，结束时间即为后摇时间。
// 	// 可以理解为施法咏唱退出阶段
// 	// 当结束阶段完成后，进入常规6-完成阶段，至此技能完成，可以执行下一指令
// 	AbilEffectStage_结束

// 	// 担保(未实装)
// 	// 担保发生在单位在准备或施放阶段发生暂时不符合发动要求的变化时（比如目标脱离射程），触发的一个特殊阶段，此时单位会尝试解决这一问题，然后重新施放技能。
// 	// 到达引导阶段后，技能被取消的时候触发，然后进入技能结束阶段
// 	// 担保阶段有新的发现，假设，技能设置了引导阶段，不可打断，可取消以后，并持续10秒。
// 	// 持续过程中，发送技能-取消指令，就会出现担保阶段。然后进入到结束阶段。如果结束阶段有持续时间，担保阶段会一直触发
// 	AbilEffectStage_担保
// )

// @schema_go --EnumToString=true
type J技能效果标旗 int

const (
	J技能效果标旗_智能施放 J技能效果标旗 = 1

	// 允许移动
	J技能效果标旗_允许移动 = 2

	// 最佳单位
	//  当前子分组内所有可以施法的单位中选择其一施放技能。如果没有勾选最佳单位(BestUnit)，则子分组内所有可以施法的单位全部会施放技能。如果在技能的执行指令里勾选了”发送到选择对象(ToSelection)“，则子分组升级为所有选中的单位。
	// 光头哥和马润都可以扎针，但光头哥和马润不在一个单位类型分组内。如果不勾选”发送到选择对象(ToSelection)“，则打针的时候只有当前选择的单位组会扎针。如果勾选了”发送到选择对象(ToSelection)“的话，你选中的所有单位，无视单位类型全部发布一遍指令。
	J技能效果标旗_最佳单位 = 5

	// 追击
	J技能效果标旗_追击 = 6

	// 清除上一次攻击目标
	J技能效果标旗_清除上一次攻击目标 = 7

	// 射程使用路径
	// 战旗游戏使用
	J技能效果标旗_射程使用路径 = 14

	// 可重复执行
	J技能效果标旗_可重复执行 = 15

	// 需要目标视野
	J技能效果标旗_需要目标视野 = 16

	// 等待花费
	J技能效果标旗_等待花费 = 22

	J技能效果标旗_引导阶段忽略效果时长 = 22
	//
	J技能效果标旗_作为普攻技能 = 23
)

// @schema_go --EnumToString=true
// @schema_ts
type E技能行为标旗 int

const (
	E技能行为标旗_智能施放 E技能行为标旗 = iota

	E技能行为标旗_允许默认打开

	E技能行为标旗_允许主动切换

	E技能行为标旗_允许瞬发
)
